package br.com.ecommerce.controller;

import java.io.IOException;
import java.util.List;

import javax.annotation.PostConstruct;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;

import br.com.ecommerce.domain.entity.Cidade;
import br.com.ecommerce.domain.entity.PessoaFisica;
import br.com.ecommerce.domain.entity.Telefone;
import br.com.ecommerce.domain.entity.Usuario;
import br.com.ecommerce.domain.enums.TipoTelefone;
import br.com.ecommerce.domain.enums.UF;
import br.com.ecommerce.seguranca.exception.SegurancaException;
import br.com.ecommerce.service.CidadeService;
import br.com.ecommerce.service.UsuarioService;
import br.com.suricattus.surispring.framework.controller.ControllerSupport;
import br.com.suricattus.surispring.spring.scope.annotation.ViewScoped;

import com.ocpsoft.pretty.faces.annotation.URLMapping;

/**
 * Controladora do cadastro de um novo Usuario
 * 
 * @author marco.nascimento
 * @see Usuario
 */
@ViewScoped
@URLMapping(id = "cadastrarUsuario", pattern = "/usuario/cadastro", viewId = "/view/usuario/cadastro/ativar.xhtml")
@Controller("cadastrarUsuarioController")
public class CadastrarUsuarioController extends ControllerSupport {
    private static final long serialVersionUID = -3790818692790882879L;

    @Autowired
    private UsuarioService usuarioService;

    @Autowired
    private CidadeService cidadeService;

    private Usuario usuario;

    private String telefoneComMascara;
    private String telefoneAlternativoComMascara;
    private TipoTelefone tipoTelefoneAlternativo;
    private TipoTelefone tipoTelefone;

    private UF ufSelecionada;
    private List<Cidade> cidades;

    private String senhaConfirmar;

    @PostConstruct
    public void init() {
        this.usuario = new Usuario(new PessoaFisica());
        this.tipoTelefone = TipoTelefone.COM;
        this.tipoTelefoneAlternativo = TipoTelefone.CEL;
    }

    public String cadastrarUsuario() throws SegurancaException, IOException {
        if (this.usuario != null) {
        	/*
            try {
                preencherTelefones();
                usuarioService.salvar(this.usuario);
                addMsg(Messages.N1007);
                return "pretty:home";
            } catch (ECommerceException e) {
                addMsgErro(e.getMensagem());
            }*/
        }
        
        return null;
    }

    private void preencherTelefones() {
        if (this.usuario != null) {
            preencherTelefone();
            preencherTelefoneAlternativo();
        }
    }

    private void preencherTelefone() {
        if (this.telefoneComMascara != null && !telefoneComMascara.equals("") && this.tipoTelefone != null) {
            Telefone telefone = new Telefone();
            String telefoneSemMascara = this.telefoneComMascara.replaceAll("\\(", "").replaceAll("\\)", "").replaceAll("-", "").replaceAll(" ", "");
            telefone.setCodArea(telefoneSemMascara.substring(0, 2));
            telefone.setNumero(telefoneSemMascara.substring(2, telefoneSemMascara.length()));
            telefone.setTipo(this.tipoTelefone);
            this.usuario.getDadosCadastrais().setTelefone(telefone);
        }
    }

    private void preencherTelefoneAlternativo() {
        if (this.telefoneAlternativoComMascara != null && !telefoneAlternativoComMascara.equals("") && this.tipoTelefoneAlternativo != null) {
            Telefone telefone = new Telefone();
            String telefoneSemMascara = this.telefoneAlternativoComMascara.replaceAll("\\(", "").replaceAll("\\)", "").replaceAll("-", "").replaceAll(" ", "");
            telefone.setCodArea(telefoneSemMascara.substring(0, 2));
            telefone.setNumero(telefoneSemMascara.substring(2, telefoneSemMascara.length()));
            telefone.setTipo(this.tipoTelefoneAlternativo);
            this.usuario.getDadosCadastrais().setTelefoneAlternativo(telefone);
        }
    }

    public void carregarCidades() {
        if (this.ufSelecionada != null) {
            this.cidades = cidadeService.buscarCidadePorUf(this.ufSelecionada);
        }
    }

    public Usuario getUsuario() {
        return usuario;
    }

    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }

    public String getTelefoneComMascara() {
        return telefoneComMascara;
    }

    public void setTelefoneComMascara(String telefoneComMascara) {
        this.telefoneComMascara = telefoneComMascara;
    }

    public String getTelefoneAlternativoComMascara() {
        return telefoneAlternativoComMascara;
    }

    public void setTelefoneAlternativoComMascara(String telefoneAlternativoComMascara) {
        this.telefoneAlternativoComMascara = telefoneAlternativoComMascara;
    }

    public TipoTelefone getTipoTelefoneAlternativo() {
        return tipoTelefoneAlternativo;
    }

    public void setTipoTelefoneAlternativo(TipoTelefone tipoTelefoneAlternativo) {
        this.tipoTelefoneAlternativo = tipoTelefoneAlternativo;
    }

    public TipoTelefone getTipoTelefone() {
        return tipoTelefone;
    }

    public void setTipoTelefone(TipoTelefone tipoTelefone) {
        this.tipoTelefone = tipoTelefone;
    }

    public UF getUfSelecionada() {
        return ufSelecionada;
    }

    public void setUfSelecionada(UF ufSelecionada) {
        this.ufSelecionada = ufSelecionada;
    }

    public List<Cidade> getCidades() {
        return cidades;
    }

    public void setCidades(List<Cidade> cidades) {
        this.cidades = cidades;
    }

    public String getSenhaConfirmar() {
        return senhaConfirmar;
    }

    public void setSenhaConfirmar(String senhaConfirmar) {
        this.senhaConfirmar = senhaConfirmar;
    }
}